
<%
	//Info jsp
	/** 
	 *  
	 * @author Alessandro  Nasso
	 * @version  2.0
	 */
%>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1" import="beans.*" import="java.util.Calendar"%>


<%
	//----------------------------
%>
<%
	//serve per effettuare le query
%>
<jsp:useBean id="verifica" scope="page" class="beans.VerificaCampi" />
<jsp:useBean id="dbConn" scope="page" class="beans.Query1" />
<%
	//----------------------------
%>

<%!//metodo per calcolare la differenza in termini di minuti tra due ore
	private long calcola_attesa(String dataA, String oraA, String dataP, String oraP) {
		String[] orarioA = oraA.split(":");
		String[] orarioP = oraP.split(":");
		String[] giornoA = dataA.split("-");
		String[] giornoP = dataP.split("-");

		Calendar calendar = Calendar.getInstance();

		calendar.set(Integer.parseInt(giornoA[2]),
				Integer.parseInt(giornoA[1]), Integer.parseInt(giornoA[0]),
				Integer.parseInt(orarioA[0]), Integer.parseInt(orarioA[1]));

		long arrivo = calendar.getTimeInMillis();

		calendar.set(Integer.parseInt(giornoP[2]),
				Integer.parseInt(giornoP[1]), Integer.parseInt(giornoP[0]),
				Integer.parseInt(orarioP[0]), Integer.parseInt(orarioP[1]));

		return ((calendar.getTimeInMillis() - arrivo) / 60000);
	}%>


<%
	// parte di output che deve essere sempre stampata
	out.print("{" + "\n\"volo\":[{\n");

	//-----------------------------------------
	String identificatore = request.getParameter("id");
	String data =           request.getParameter("data");
// 	//-----------------------------------------
// 	String[] dataSeparata = data.split("-");
// 	if(dataSeparata[1].length()==1){
// 		dataSeparata[1]="0"+dataSeparata[1];
// 	}
// 	if(dataSeparata[0].length()==1){
// 		dataSeparata[0]="0"+dataSeparata[0];
// 	}
// 	request.setAttribute("data", data);
// 	data=dataSeparata[0]+"-"+dataSeparata[1]+"-"+dataSeparata[2];
// 	System.err.println("post if "+data);
	if (verifica.verificaIdVolo(identificatore) && verifica.verificaData(data)) {

		String[] id = identificatore.trim().split(" "); // elimino gli spazi vuoti all'inizio e alla fine se ci sono e faccio lo split

		//out.print(id[0]);

		//---------------
		String oraPrecedente = null; // stringa in cui salvo l'orario di arrivo del precedente volo
		String dataPrecedente = null; // stringa in cui salvo la data di arrivo del precedente volo
		//---------------

		// recupero i numeri delle colonne

		//-------------------------------------------
		Integer colonna_compagnia = 0, colonna_identificatore = 1, colonna_posti = 4, colonna_classe = 2, colonna_agenzia = 3, colonna_tasse = 6, colonna_prezzo = 5, colonna_aeroP = 7, colonna_aeroA = 10, colonna_cittaP = 8, colonna_cittaA = 11, colonna_nazioneP = 9, colonna_nazioneA = 12, colonna_dataPartenza = 15, colonna_dataArrivo = 16, colonna_oraPartenza = 13, colonna_oraArrivo = 14, colonna_durata = 17, colonna_partenza = 18, colonna_destinazione = 19;
		//---------------------------------------------

		// recupero i dati dei vari voli
		for (int scalo = 0; scalo < id.length; scalo++) {

			String query = 
					"SELECT V.compagnia, "
							+"CONCAT(V.compagnia, V.id) as identificatore,"
							+"V.classe,"
							+"V.agenzia,"
							+"V.posti,"
							+"V.prezzo,"
							+"V.tasse,"
							+"A.Nome AS aeroP,"
							+"C.Nome AS cittaP,"
							+"C.codNazione AS nazioneP,"
							+"A1.Nome AS aeroA,"
							+"C1.Nome AS cittaA,"
							+"C1.codNazione AS nazioneA,"
							+"DATE_FORMAT(V.oraP,'%H:%i') AS ora_partenza,"
							+"DATE_FORMAT(V.oraA,'%H:%i') AS ora_arrivo,"
							+"DATE_FORMAT(V.oraP,'%d-%m-%Y') AS data_partenza,"
							+"DATE_FORMAT(V.oraA,'%d-%m-%Y') AS data_arrivo,"
							+"V.durata,"
							+"V.partenza,"
							+"V.destinazione"
					+" FROM voli V, aereoporti A, aereoporti A1, citta C, citta C1 "
					+" WHERE CONCAT(V.compagnia,V.id)="+"'"+id[scalo]+"' "
							+"AND DATE_FORMAT(V.oraP,'%d-%m-%Y')="+"'"+data+"' "
							+"AND C.idCitta=A.CodCitta "
							+"AND A.idAereoporto=V.partenza "
							+"AND C1.idCitta=A1.CodCitta "
							+"AND A1.idAereoporto=V.destinazione; ";

			//out.print(query);

			// parametri usati dalla pagina inclusa sotto
			request.setAttribute("prelievo", "true");
			request.setAttribute("query", query);
	//recupero i risultati
			String[][] voli = dbConn.getDati(query);

			if (voli != null) {

				/* per eventuali modifiche nella query/ DB
				 per recuperare nomi colonne
				 for(int i=0; i<voli[0].length;i++)
				 {
				 if(voli[0][i].compareTo("compagnia")==0) 
				 {
				 colonna_compagnia= i;
				 }
				 }// fine for recupero nomi colonne
				 */

				//------------------------------------------------------------------- 3 stampo a video i risultati

				if (scalo > 0) {
					out.print(",{\n\"attesa\":\""
							+ calcola_attesa(dataPrecedente,
									oraPrecedente,
									voli[1][colonna_dataPartenza],
									voli[1][colonna_oraPartenza])
							+ "\",\n");
				}

				out.print("\"partenza\":{\n");
				out.print("\"aeroporto\": \""
						+ voli[1][colonna_partenza] + "\",\n");
				out.print("\"nome\": \"" + voli[1][colonna_aeroP]
						+ "\",\n");
				out.print("\"citta\": \"" + voli[1][colonna_cittaP]
						+ "\",\n");
				out.print("\"nazione\": \"" + voli[1][colonna_nazioneP]
						+ "\",\n");
				out.print("\"data\": \""
						+ voli[1][colonna_dataPartenza] + "\",\n");
				out.print("\"ora\": \"" + voli[1][colonna_oraPartenza]
						+ "\"\n");
				out.print("},\n");

				out.print("\"destinazione\":{\n");
				out.print("\"aeroporto\": \""
						+ voli[1][colonna_destinazione] + "\",\n");
				out.print("\"nome\": \"" + voli[1][colonna_aeroA]
						+ "\",\n");
				out.print("\"citta\": \"" + voli[1][colonna_cittaA]
						+ "\",\n");
				out.print("\"nazione\": \"" + voli[1][colonna_nazioneA]
						+ "\",\n");
				out.print("\"data\": \"" + voli[1][colonna_dataArrivo]
						+ "\",\n");
				out.print("\"ora\": \"" + voli[1][colonna_oraArrivo]
						+ "\"\n");
				out.print("},\n");

				out.print("\"altro\":{" + "\n");
				out.print("\"durata\": \"" + voli[1][colonna_durata]
						+ "\",\n");
				out.print("\"classe\": \"" + voli[1][colonna_classe]
						+ "\",\n");
				out.print("\"agenzia\": \"" + voli[1][colonna_agenzia]
						+ "\",\n");
				out.print("\"compagniaSigla\": \""
						+ voli[1][colonna_compagnia] + "\",\n");
				out.print("\"posti\": \"" + voli[1][colonna_posti]
						+ "\",\n");
				out.print("\"prezzo\": \"" + voli[1][colonna_prezzo]
						+ "\",\n");
				out.print("\"tasse\": \"" + voli[1][colonna_tasse]
						+ "\"\n");
				out.print("}}\n");

				// setto oraPrecedente come l'ora di arrivo di questo volo
				// e dataPrecedente come data di arrivo di questo volo
				oraPrecedente = voli[1][colonna_oraArrivo];
				dataPrecedente = voli[1][colonna_dataArrivo];

			}// fine verifica voli non nulli

		}// fine ciclo per il numero di scali

	}// fine verifica che l'id passato non sia dannoso

	out.print("]" + "\n" + "}");
%>

